% $Header: /cvsroot/html2ps/postscript/flow.block.ps,v 1.1 2005/12/18 07:21:38 Konstantin Exp $

% Shorthand for
%   $this->_current_x = $context->float_left_x($this->_current_x, $this->_current_y);
% in PHP
%
/offset-x-floats {                % => Box
  dup get-current-x
  1 index get-current-y           % => Box X Y
  float-left-x                    % => Box X 
  1 index 
  put-current-x
  pop
} def

% Close line subroutine; checks if text justification
% is needed and applies it to the line-box content
/close-line-justify {              % => Box
  dup get-line dup length 1 gt {   % => Box Line
    pop
    dup get-text-align             % => Box AlignFunction 
    1 index exch                   % => Box Box AlignFunction 
    exec                           % => Box
  } {
    dup length 0 gt {
      0 get                        % => Box L0
      get-local-align              % => Box LA
      1 index exch                 % => Box Box LA
      exec                         % => Box
    } {
      pop
      dup get-text-align          % => Box AlignFunction 
      1 index exch                % => Box Box AlignFunction 
      exec                        % => Box
    } ifelse
  } ifelse
} def

/close-line {                      % => Box
% make line justification

% Note that text-align should not be applied to the block boxes!
% As block boxes will be alone in the line-box, we can check
% if the very first box in the line is inline; if not - no justification should be made
  dup get-line length 0 gt {
    dup get-line 0 get is-inline {
      close-line-justify
    } {
% Nevertheless, CENTER tag and P/DIV with ALIGN attribute set should affect the 
% position of non-inline children.
      dup get-box-dict
      /PseudoAlign get
      1 index exch                 % => Box Box PA
      exec                         % => Box      
    } ifelse
  } if


  dup get-line                % => Box Line
  0 exch                      % => Box 0(LH) Line  
  {                           % => Box LH LineElement
    get-full-height
    max
  } forall                    % => Box LH

  % Clear line 
  [] 2 index put-line         % => Box LH
  % Reset X coordinate
  1 index get-left-internal   % => Box LH LeftI
  2 index put-current-x       % => Box LH
  % Extend Y coordinate
  1 index get-current-y       % => Box LH CY
  exch sub                    % => Box CY-LH
  1 index put-current-y       % => Box

  % Reset information about the line baseline
  0 1 index put-line-baseline

% Line box completed, render the deferred floats
  dup get-box-dict
  /Flow get /DeferredFloats get
  {
    flow-float
  } forall

  dup get-box-dict 
  /Flow get /DeferredFloats [] put  

% modify the current-x value, so that next inline box will not intersect any floating boxes
  dup offset-x-floats
  
% Clear the stack
  pop
  /no-justify {false} def
} def

